Міністерство Освіти і Науки України
Національний Університет “Львівська Політехніка”
Кафедра СКС
Стиск зображень з використанням дискретних косинусних перетворень
Методичні вказівкидо розрахунково-графічної роботи (частина 1) з курсу “Проектування комп’ютерних засобів цифрової обробки сигналів та зображень” для студентів спеціальностей
7.091503 і 8.091503 “Спеціалізовані комп'ютерні системи“
Затвердженона засіданні кафедри” Спеціалізовані комп'ютерні системи ”Протокол № 1 від 28 серпня 2009 р.
Львів – 2009
Стиск зображень з використанням дискретних косинусних перетворень :
Методичні вказівки до розрахунково-графічної роботи (частина 1) з курсу “Проектування комп’ютерних засобів цифрової обробки сигналів та зображень” для студентів спеціальностей 7.091503 і 8.091503 “Спеціалізовані комп'ютерні системи“ / Укладач: Р. Попович – Львів: Національний університет “Львівська політехніка”, 2009, с.
Укладач: Р. Попович, к.т.н., доцент
Відповідальний за випуск: Дунець Р. Б., професор, завідувач кафедри
Рецензенти: Кочан Р.В., к. т. н, доцент
Троценко В.В., к. т. н, доцент
Мета роботи
Опрацювати та випробувати в середовищі MATLAB 6.5 програму, яка реалізує стиск зображень з використанням дискретного косинусного перетворення.
Опис алгоритму
JPEG стиск
Вхід: Lena512.pgm
Вихід:Lena512jpg
Алгоритм стиску
1. Початкове зображення розбиваємо на блоки розміру 8Х8 і кожен піксель у блоці зсуваємо на -128
2. Кожен блок незалежно перетворюємо за допомогою двовимірного ДКП (дискретного косинусного перетворення) – Matlab команда dct2
3. Кожен перетворений блок квантуємо згідно з виразом:
x(j,k)=round(block_dct(j,k)/quant(j,k))
Матриця квантування з елементами quant(j,k):
quant=,
де параметр Q змінюємо, регулюючи степінь стиску зображення.
Коефіцієнти заокруглюємо до найближчого цілого.
4. Обходячи двовимірний масив ДКП коефіцієнтів зигзагом (змійкою) перетворюємо його в одновимірний вектор
5. Перший коефіцієнт у векторі (так званий DC коефіцієнт) заміняємо на його різницю з першим коефіцієнтом попереднього вектора. Отриману різницю кодуємо за допомогою коду Хафмена.
Таблиця DC коду Хафмена: (категорія, кодове слово) (наведена в файлі dc_huffman_table.txt)
Категорія
Діапазон коефіцієнта
0
0
1
-1,1
2
-3,-2,2,3
3
-7,…,-4,4,…,7
…
…
Після отримання кодового слова для категорії, вимагаються ще додаткові біти, щоб визначити знак та абсолютну величину ненульового коефіцієнта в кожній із категорій.
6. Коефіцієнти вектора починаючи з другого називають AC коефіцієнтами. Ненульові AC коефіцієнти також кодуємо кодом Хафмена, але з використанням іншої таблиці. Принцип полягає в такому: кодове слово залежить від числа нульових коефіцієнтів, що йдуть попереду даного ненульового, та від категорії ненульового коефіцієнта.
Таблиця AC коду Хафмена: (число нулів, категорія, кодове слово) (наведена в файлі аc_huffman_table.txt)
Кінець блоку (0, 0, 1010)
7. Послідовно опрацьовуємо всі блоки зображення, як описано раніше.
Оцінювання показників
Отримати PSNR та відтворені зображення при 0.25 bpp, 0.5 bpp, 0.75 bpp, 1 bpp, 1.5 bpp.
Приклад опрацювання зображення.
Візьмемо для прикладу Q=0.5
Тоді матриця квантування дорівнює
8 6 5 8 12 20 26 31
6 6 7 10 13 29 30 28
7 7 8 12 20 29 35 28
7 9 11 15 26 44 40 31
9 11 19 28 34 55 52 39
12 18 28 32 41 52 57 46
25 32 39 44 52 61 60 51
36 46 48 49 56 50 52 50
Початкове зображення розбиваємо на блоки розміру 8x8. Візьмемо для прикладу два послідовних (зліва вправо) 8x8 блоки у верхньому лівому кутку початкового зображення lena512.pgm.
block1
162 162 162 161 162 157 163 161
162 162 162 161 162 157 163 161
162 162 162 161 162 157 163 161
162 162 162 161 162 157 163 161
162 162 162 161 1...